One most important mechanism for Transmission Control Protocol (Transmission Control Protocol, TCP) reliability is retransmission. Retransmission in the TCP protocol is classified into timeout-based retransmission and fast retransmission.
When the timeout-based retransmission is used, a transmit end starts one timer when sending each packet segment and waits for acknowledgment information; after successfully receiving new data, a receive end returns the acknowledgment information. If data cannot be acknowledged before the timer expires, according to the TCP protocol, it is considered that data in the packet segment is lost or damaged, and the data in the packet segment needs to be reorganized and retransmitted, where the retransmitted packet is a retransmission packet. When the data is retransmitted due to overtime, and a congestion window exceeds a slow start threshold, a congestion control mechanism needs to enter a congestion avoidance state starting from slow start. The slow start needs to detect an actual network capacity to avoid congestion due to sending of excessive amount of data, and therefore retransmission efficiency is very low.
When the fast retransmission is used, if discovering a packet loss, the receive end consecutively sends a duplicate acknowledgment (duplicate Acknowledge, DUPACK) to the transmit end, where the DUPACK indicates a lost data packet. If receiving at least three DUPACKs, the transmit end may realize that a packet loss occurs on data, which needs to be retransmitted. In this case, there is no need to wait for the timer to expire. The fast retransmission may avoid a case in which the transmit end is idle for a relatively long time because of waiting for timer expiration, so as to increase network throughput. After retransmission, the transmit end may skip slow start and directly enter the congestion avoidance state.
In TCP communication, if a specific data packet is lost in a transmit sequence, the TCP retransmits a subsequent packet starting from a last acknowledged packet. In this case, a packet that has been properly transmitted previously may also be sent repeatedly, which sharply decreases TCP performance. In a TCP selective acknowledgment (Selective Acknowledge, SACK) mechanism, the receive end may send a SACK. The SACK may instruct the TCP to resend only a lost packet, instead of sending all subsequent packets. In addition, the SACK provides a corresponding mechanism that enables a receiver to tell a sender which data is lost, which data is resent, and which data has been received in advance, and the like.
In the prior art, to improve a concurrent capability of a TCP packet, a window for the TCP to receive and send a packet is relatively large, and therefore, there are relatively many TCP packets that are sent in transit. A packet that needs to be sent by the transmit end to the receive end is referred to as a common packet. Under a condition in the prior art, a retransmission packet and a common packet are transmitted on a TCP data connection path. A transmission process is strictly kept in order. The retransmission packet cannot overtake a common packet transmitted in front, which causes an increase in a quantity of out-of-order reassembly packets at the receive end, thereby leading to excessive out-of-order reassembly buffers. As a result, the buffers are overflown, out-of-order reassembly pressure of the receive end increases, and even a new packet loss may occur, which results in sharp degradation in TCP transmission performance.